<!DOCTYPE html>
<html lang="zh-cn">
    <head>
        <meta charset="UTF-8"/>
        <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
        <title>实现移动端Retina屏幕1px边框的7种方法-2</title>
        <style>
            .scale-1px{
              position: relative;
              margin-bottom: 20px;
              border:none;
            }
            .scale-1px:after{
              content: '';
              position: absolute;
              top: 0;
              left: 0;
              border: 1px solid #000;
              -webkit-box-sizing: border-box;
              box-sizing: border-box;
              width: 200%;
              height: 200%;
              -webkit-transform: scale(0.5);
              transform: scale(0.5);
              -webkit-transform-origin: left top;
              transform-origin: left top;
            }
            .border-1px{
                border:1px solid #c8c7cc;
            }
        </style>
    </head>
    <body>
        <h1>实现移动端Retina屏幕1px边框的7种方法</h1>
        <p>来源:<a href="http://www.yyyweb.com/4950.html"></a></p>
        <h2>7、伪类 + transform 实现</h2>


        <p>对于老项目，有没有什么办法能兼容1px的尴尬问题了，个人认为伪类+transform是比较完美的方法了。</p>
        <p>原理是把原先元素的 border 去掉，然后利用 :before 或者 :after 重做 border ，并 transform 的 scale 缩小一半，原先的元素相对定位，新做的 border 绝对定位。</p>
        <p>单条border样式设置：</p>

        <pre>.scale-1px{
              position: relative;
              border:none;
            }
            .scale-1px:after{
              content: '';
              position: absolute;
              bottom: 0;
              background: #000;
              width: 100%;
              height: 1px;
              -webkit-transform: scaleY(0.5);
              transform: scaleY(0.5);
              -webkit-transform-origin: 0 0;
              transform-origin: 0 0;
            }
        </pre>
        <p>四条boder样式设置:</p>

        <pre>.scale-1px{
              position: relative;
              margin-bottom: 20px;
              border:none;
            }
            .scale-1px:after{
              content: '';
              position: absolute;
              top: 0;
              left: 0;
              border: 1px solid #000;
              -webkit-box-sizing: border-box;
              box-sizing: border-box;
              width: 200%;
              height: 200%;
              -webkit-transform: scale(0.5);
              transform: scale(0.5);
              -webkit-transform-origin: left top;
              transform-origin: left top;
            }
        </pre>
        <p>最好在使用前也判断一下，结合 JS 代码，判断是否 Retina 屏：</p>

        <pre>if(window.devicePixelRatio && devicePixelRatio >= 2){
              document.querySelector('ul').className = 'scale-1px';
            }
        </pre>
        <p>优点：</p>
        <p>所有场景都能满足</p>
        <p>支持圆角(伪类和本体类都需要加border-radius)</p>
        <p>缺点：</p>
        <p>对于已经使用伪类的元素(例如clearfix)，可能需要多层嵌套</p>
        <p>利用css 对阴影处理的方式实现0.5px的效果</p>
        <div class="border-1px">1px边框-border:1px solid #c8c7cc</div>
        <div class="scale-1px">1px边框</div>
    </body>
</html>